﻿using System.Threading.Channels;

namespace _05_C_中的闭包问题
{
    internal class Program
    {
        //具体来说，闭包捕获外部作用域中的变量时，
        //它捕获的是引用而不是副本。因此，闭包可以通过这个引用来读取和修改外部变量的值。
        static void Main(string[] args)
        {
            Console.Title = "C#的闭包问题";

            List<Action> actions = new List<Action>();

            //for (int i = 0; i < 6; i++)
            //{
            //    int j = i;//解决闭包问题
            //    actions.Add(() => Console.WriteLine(i));
            //}

            //foreach (Action action in actions)
            //{
            //    action();
            //}

            //Task任务
            //for (int i = 0; i < 6; i++)
            //{
            //    Task.Run(() =>
            //    {
            //        Console.WriteLine(i);
            //    });
            //}

            //for (int i = 0; i < 6; i++)
            //{
            //   Task task= Task.Run(() =>
            //    {
            //        Console.WriteLine(i);
            //    });
            //    task.Wait();
            //}

            //for (int i = 0; i < 6; i++)
            //{
            //    int j = i;
            //    Task.Run(() =>
            //    {
            //        Console.WriteLine(j);
            //    });
            //}

            //foreach的循环
            int[] nums = new int[6] { 1, 2, 3, 4, 5, 6 };

            foreach (int i in nums)
            {
                actions.Add(() => Console.WriteLine(i));
            }

            foreach (Action action in actions)
            {
                action();
            }

            Console.ReadKey();
        }
    }
}
